package com.example.azheng.okhttpdemo.utils;

import com.example.azheng.okhttpdemo.beans.JuheBean;

import java.util.concurrent.TimeUnit;

import io.reactivex.Observable;
import io.rx_cache2.DynamicKey;
import io.rx_cache2.EvictDynamicKey;
import io.rx_cache2.LifeCache;
import retrofit2.http.GET;

/**
 * @author azheng
 * @date 2018/4/18.
 * GitHub：https://github.com/RookieExaminer
 * email：wei.azheng@foxmail.com
 * description：
 */
public interface CacheProvidersApi {
    /**
     * LifeCache设置缓存过期时间. 如果没有设置@LifeCache , 数据将被永久缓存 除非你使用了 EvictProvider,EvictDynamicKey or EvictDynamicKeyGroup .
     *
     * @param juheBeanObservable
     * @param userNmae           驱逐与一个特定的键使用EvictDynamicKey相关的数据。比如分页，排序或筛选要求
     * @param evictDynamicKey    可以明确地清理指定的数据 DynamicKey.
     * @return
     */

//    @LifeCache(duration = 1,timeUnit = TimeUnit.MINUTES)
    @GET("index?&type=&key=606d652cb2c7c8920cc5904a1ed8e671")
    Observable<JuheBean> getData(Observable<JuheBean> juheBeanObservable, DynamicKey userNmae, EvictDynamicKey evictDynamicKey);


    /**
     * @param user：这是个Observable类型的对象，简单来说，这就是你将要缓存的数据对象。
     @param userName:DynamicKey类型，顾名思义，就是一个动态的key，我们以它作为tag，将数据存储到对应名字的File中
     @param evictDynamicKey 可以明确地清理指定的数据 ，很简单，如果我们该参数传入为true，那么RxCache就会驱逐对应的缓存数据直接进行网络的新一次请求（即使缓存没有过期）。如果传入为false，说明不驱逐缓存数据，如果缓存数据没有过期，那么就不请求网络，直接读取缓存数据返回。
     @return 可以看到，该接口方法中，返回值为Observable,泛型为user，这个Observable的对象user和参数中传进来的Observable的对象user有什么区别呢？
     --- 很简单，返回值Observable中的数据为经过缓存处理的数据。

     作者：却把清梅嗅2
     链接：https://www.jianshu.com/p/91e2a622dce2
     來源：简书
     著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
     */
}
